/* 954. 二倍数对数组 */
/**
 * @param {number[]} arr
 * @return {boolean}
 */
var canReorderDoubled = function (arr) {
    const cnt = new Map()
    for (const x of arr) {
        cnt.set(x, (cnt.get(x) || 0) + 1)
    }
    /* 0只能与0匹配 */
    if ((cnt.get(0) || 0) % 2 !== 0) return false
    const vals = []
    for (const x of cnt.keys()) {
        vals.push(x)
    }
    vals.sort((a, b) => Math.abs(a) - Math.abs(b))
    for (const x of vals) {
        /* 无法找到匹配2x 与 x */
        if ((cnt.get(2 * x) || 0) < cnt.get(x)) return false
        cnt.set(x * 2, (cnt.get(2 * x) || 0) - cnt.get(x))
    }

    return true
}
const result = canReorderDoubled([4, -2, 2, -4])
console.log('canReorderDoubled :>', result);

/*
    用?? 代替|| 用于判断运算符左侧的值为null 或undefined 是
    才返回右侧的值 它的行为类化于|| 但更严 
*/

const test1 = 0 ?? 1

